import { Cls } from "./Defined";

/**
 * 类型工具类
 */
export class TypeUtil {

    /**
     * 获取实例对象的类
     * @param ins 
     */
    static getCls<T extends Object>(ins: T) {
        return ins.constructor as Cls<T>;
    }

    /**
     * 使一个对象不可修改
     * @param obj 
     */
    static readonlyType<T = any>(obj: T): Readonly<T> {
        for (const key in obj) {
            const des = Object.getOwnPropertyDescriptor(obj, key);
            if (des && des.configurable) {
                des.writable = false;
                Object.defineProperty(obj, key, des);
            }
        }
        return obj;
    }

}